package com.chunlin.package3;

//import java.util.Date;
//如果需要使用 java.util 中的其他类, 可以使用 import java.util.*
//但是我们更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况
import java.util.*;
import java.sql.*;
//import static语句用于导入类或接口中的静态成员（字段或方法），使得它们可以直接使用而不需要类名作为前缀。这种方式可以使代码更简洁和易读，特别是在频繁使用某个类的静态成员时
import static com.chunlin.math.MathConstants.*;

public class Package {
    //包的概念
    //在面向对象体系中，提出了一个软件包的概念，即：为了更好的管理类，把多个类收集在一起成为一组，称为软件包。有点类似于目录
    //在Java中也引入了包，包是对类、接口等的封装机制的体现，是一种对类或者接口等的很好的组织方式
    // 比如：一个包中的类不想被其他包中的类使用。包还有一个重要的作用：在同一个工程中允许存在相同名称的类，只要处在不同的包中即可

    public static void test1() {
        //Java 中已经提供了很多现成的类供我们使用. 例如Date类：可以使用 java.util.Date 导入 java.util 这个包中的 Date类
        java.util.Date date = new java.util.Date();
        //获取一个毫秒级的时间戳
        System.out.println(date.getTime());

        //但是这种写法比较麻烦一些, 可以使用 import语句导入包
//        Date date1 = new Date();
//        System.out.println(date1.getTime());
    }

    public static void test2() {
        // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
//        Date date = new Date();

        //在这种情况下需要使用完整的类名
        java.util.Date date = new java.util.Date();
        System.out.println(date.getTime());

        // 静态导入的方式写起来更方便一些
        double radius = 5;
        double area = PI * square(radius);
        System.out.println("Area of circle: " + area);
        System.out.println("Euler's number: " + E);

        //注意事项: import 和 C++ 的 #include 差别很大. C++ 必须 #include来引入其他文件内容, 但是 Java 不需要
        //import 只是为了写代码的时候更方便. import 更类似于 C++ 的 namespace 和 using
    }

    public static void main(String[] args) {
//        test1();
        test2();
    }

}
